# gil global interpreter lock（cpython）
# Python中一个线程对应于c语言中的一个线程
# gil使得同一个时刻只有一个线程在一个cpu上执行字节码，无法将多个线程映射到多个cpu上执行
# 在CPython解释器中GIL是一把互斥锁，用来阻止同一个进程下的多个线程同时执行 同一个进程下的多个线程无法利用多核优势！！！
# 因为CPython中的内存管理不是线程安全的
# gil锁会根据执行的字节码数以及时间片释放gil，gil遇到io操作会主动释放
"""
重点:
    1.GIL不是Python的特点而是CPython解释器的特点
    2.GIL是保证解释器级别的数据的安全
    3.GIL会导致同一个进程下的多个线程的无法同时执行
    4.针对不同的数据还是需要加不同的锁处理
"""

import threading

total = 0


def add():
    global total
    for i in range(100000000):
        total += 1


def desc():
    global total
    for i in range(100000000):
        total -= 1


if __name__ == '__main__':
    add_thread = threading.Thread(target=add)
    desc_thread = threading.Thread(target=desc)
    add_thread.start()
    add_thread.join()
    desc_thread.start()
    desc_thread.join()
    print(total)
